﻿Public Class FrmABMArticulo
    Dim acceso As New acceso_a_datos
    Dim combo As New combo
    Dim grillaActiva As Boolean = False


    Private Sub FrmABMArticulo_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        combo.cargar(Me.cmbClasificacion, "Calificacion")
        combo.cargar(Me.cmbGenero, "Genero")
        combo.cargar(Me.cmbTipoArticulo, "TipoArticulo")
    End Sub

    Friend Sub resultadoBusqueda(ByRef _tabla As Data.DataTable)
        Me.DataGridViewDatos.DataSource = _tabla
        Dim activo As Boolean = False
        If Me.DataGridViewDatos.Rows.Count > 0 Then
            Me.DataGridViewDatos.CurrentCell = DataGridViewDatos(1, 0)
            activo = True
        End If
        Me.DataGridViewDatos.Enabled = activo
        btnModificar.Enabled = activo
        btnEliminar.Enabled = activo
        grillaActiva = True
        Me.DataGridViewDatos.Columns(0).Visible = False
        Me.DataGridViewDatos.Columns(3).Visible = False
        If activo Then
            cargarDatos()
        Else
            limpiarCampos()
        End If
        Me.DataGridViewDatos.Focus()
    End Sub

    Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
        Dim formBuscarArticulo As New FrmBuscarArticulos(Me)
        formBuscarArticulo.Show()
    End Sub

    Public Function getGrillaDatos() As DataGridView
        Return DataGridViewDatos
    End Function

    Private Sub DataGridViewDatos_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridViewDatos.SelectionChanged
        cargarDatos()
    End Sub

    Private Sub cargarDatos()
        If grillaActiva And Not DataGridViewDatos.CurrentRow Is Nothing Then
            mtxtCodigoBarras.Text = DataGridViewDatos.CurrentRow.Cells("Código de Barras").Value
            txtNombreArticulo.Text = DataGridViewDatos.CurrentRow.Cells("Nombre").Value
            cmbTipoArticulo.SelectedIndex = cmbTipoArticulo.FindString(DataGridViewDatos.CurrentRow.Cells("Tipo de Artículo").Value)
            cmbClasificacion.SelectedIndex = cmbClasificacion.FindString(DataGridViewDatos.CurrentRow.Cells("Calificación").Value)
            cmbGenero.SelectedIndex = cmbGenero.FindString(DataGridViewDatos.CurrentRow.Cells("Genero").Value)
            txtCantidadAlquiler.Text = DataGridViewDatos.CurrentRow.Cells("Cantidad Alquiler").Value
            txtCantidadVenta.Text = DataGridViewDatos.CurrentRow.Cells("Cantidad Venta").Value
            txtSinopsis.Text = DataGridViewDatos.CurrentRow.Cells("Sinopsis").Value
        End If
    End Sub

    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click
        accion = estado.nuevo
        deshabilitarGrilla()
        borrarContenidoEnGrilla()
    End Sub

    Private Sub deshabilitarGrilla()
        grillaActiva = False
        DataGridViewDatos.Enabled = False
        btnEliminar.Enabled = False
        btnModificar.Enabled = False
    End Sub
    Private Sub borrarContenidoEnGrilla()
        DataGridViewDatos.DataSource = Nothing
    End Sub

    Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click
        Dim tabla As New Data.DataTable
        Dim consulta As String = "select a.cantidadAlquiler, a.cantidadVenta from Articulo a, Ejemplar e where a.idarticulo = e.idArticulo and a.idarticulo =" & DataGridViewDatos.CurrentRow.Cells(0).Value
        tabla = acceso._consulta(consulta)

        If tabla.Rows.Count > 0 Then
            MsgBox("No se puede eliminar el articulo porque tiene ejemplares asociados")
            Exit Sub
        End If





        Dim titulo As String = Me.DataGridViewDatos.CurrentRow.Cells("Nombre").Value
        acceso._tabla = "Articulo"
        If MsgBox("Está seguro que desea borrar el artículo " & titulo & " ?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Importante") = MsgBoxResult.Yes Then
            Me.acceso._borrar("Delete From Articulo where idArticulo = " & DataGridViewDatos.CurrentRow.Cells(0).Value)
            MsgBox("Se borró el articulo " & titulo & " con éxito")
            accion = estado.eliminar
            limpiarCampos()
            borrarContenidoEnGrilla()
            deshabilitarGrilla()
        End If
    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        If mtxtCodigoBarras.Text.Trim = "" Then
            If MsgBox("Usted no ingreso ningún código de barras para el artículo " & txtNombreArticulo.Text & " ¿ Desea guardarlo sin código de barras ?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Importante") = MsgBoxResult.Yes Then
                mtxtCodigoBarras.Text = 0
            Else
                mtxtCodigoBarras.Focus()
                Exit Sub
            End If
        End If
        If validarCampos() Then
            If accion = estado.nuevo Then
                If Not validarUnico() Then
                    Exit Sub
                End If
            End If
            acceso._tabla = "Articulo"
            Dim consultaInsert As String
            'consultaInsert = "nombre='" & txtNombreArticulo.Text & "', sinopsis='" & txtSinopsis.Text & "', idTipoArticulo=" & cmbTipoArticulo.SelectedValue & ", idCalificacion=" & cmbClasificacion.SelectedValue & ", idGenero=" & cmbGenero.SelectedValue
            consultaInsert = "INSERT INTO " & acceso._tabla & "(codigoBarras, nombre, sinopsis, idTipoArticulo, idCalificacion, idGenero, cantidadAlquiler, cantidadVenta) VALUES(" & mtxtCodigoBarras.Text & ", '" & txtNombreArticulo.Text & "' ,'" & txtSinopsis.Text & "'," & cmbTipoArticulo.SelectedValue & ", " & cmbClasificacion.SelectedValue & ", " & cmbGenero.SelectedValue & ", " & txtCantidadAlquiler.Text & ", " & txtCantidadVenta.Text & ")"
            Dim consultaModificar As String

            If accion = estado.nuevo Then
                acceso._consulta(consultaInsert)
                MsgBox("Se agregó el artículo " & txtNombreArticulo.Text & " con éxito")

                Dim tabla As Data.DataTable = acceso._consulta("SELECT MAX(idarticulo) AS idArticulo FROM " & acceso._tabla)
                acceso._tabla = "Ejemplar"
                For i = 0 To CType(txtCantidadAlquiler.Text, Integer) - 1
                    acceso._consulta("INSERT INTO " & acceso._tabla & "(idEjemplar, idArticulo, FechaAlta, Disponible) VALUES(" & i + 1 & ", " & tabla.Rows(0)("idArticulo") & ", '" & Date.Today & "', '" & Boolean.TrueString & "')")
                Next
                MsgBox("Se agregarón " & txtCantidadAlquiler.Text & " ejemplares al artículo " & txtNombreArticulo.Text & " con éxito")
            Else
                consultaModificar = "UPDATE " & acceso._tabla & " SET codigoBarras=" & mtxtCodigoBarras.Text & ", nombre='" & txtNombreArticulo.Text & "', sinopsis='" & txtSinopsis.Text & "', idTipoArticulo=" & cmbTipoArticulo.SelectedValue & ", idCalificacion=" & cmbClasificacion.SelectedValue & ", idGenero=" & cmbGenero.SelectedValue & ", cantidadAlquiler=" & txtCantidadAlquiler.Text & ", cantidadVenta=" & txtCantidadVenta.Text & " WHERE idArticulo =" & DataGridViewDatos.CurrentRow.Cells(0).Value
                acceso._modificar(consultaModificar)
                MsgBox("Se modificó el artículo " & txtNombreArticulo.Text & " con éxito")
                deshabilitarGrilla()
                borrarContenidoEnGrilla()
                txtCantidadAlquiler.Enabled = True
            End If
            limpiarCampos()
            habilitarDeshabilitarBotonesAcciones()
            habilitarDeshabilitarCampos()
        End If
    End Sub

    Private Sub btnModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModificar.Click
        accion = estado.modificar
        txtCantidadAlquiler.Enabled = False
        deshabilitarGrilla()
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        If accion = estado.modificar Then
            btnEliminar.Enabled = True
            btnModificar.Enabled = True
            txtCantidadAlquiler.Enabled = False
        End If
        accion = estado.nuevo
    End Sub
    Private Function validarCampos() As Boolean
        Dim valido As Boolean = True
        Dim camposVacios(GroupBoxDatos.Controls.Count) As Control
        For p = 0 To camposVacios.Length - 1
            camposVacios(p) = Nothing
        Next
        For Each campo As Control In GroupBoxDatos.Controls
            If Not campo.GetType.Name = "Panel" And campo.Text = "" And Not campo.Tag = "Piso" And Not campo.Tag = "Dpto" Then
                camposVacios(campo.TabIndex) = campo
                valido = False
            End If
        Next

        Dim campoFoco As Control = Nothing
        Dim mensajeCamposVacios As String = "Los campos "

        For i = 0 To camposVacios.Length - 1
            If Not camposVacios(i) Is Nothing Then
                mensajeCamposVacios += camposVacios(i).Tag & ", "
                If campoFoco Is Nothing Then
                    campoFoco = camposVacios(i)
                End If
            End If
        Next

        mensajeCamposVacios += "están vacíos."
            If Not valido Then
                MsgBox(mensajeCamposVacios, MsgBoxStyle.Exclamation, "Campos no Válidos")
            End If


            If Not campoFoco Is Nothing Then
                campoFoco.Focus()
            End If

            Return valido
    End Function

    Private Sub txtCantidadAlquiler_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCantidadAlquiler.KeyPress, txtCantidadVenta.KeyPress
        If Char.IsDigit(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If
    End Sub

    Private Function validarUnico() As Boolean
        Dim tabla As New Data.DataTable

        If mtxtCodigoBarras.Text = 0 Then
            Return True
        End If

        acceso._tabla = "Articulo"
        tabla = acceso.leo_tabla("codigoBarras=" & mtxtCodigoBarras.Text)
        If tabla.Rows.Count > 0 Then
            MsgBox("El Artículo '" & tabla(0)("nombre") & "' ya está registrado con ese Código de Barras", MsgBoxStyle.Exclamation, "Artículo Existente")
            mtxtCodigoBarras.Text = ""
            mtxtCodigoBarras.Focus()
            Return False
        End If
        Return True
    End Function

    Private Sub mtxtCodigoBarras_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles mtxtCodigoBarras.LostFocus
        If Not mtxtCodigoBarras.Text.Trim = "" And accion = estado.nuevo Then
            validarUnico()
        End If
    End Sub
End Class
